#ifndef STORAGE_COMPONENT_H_
#define STORAGE_COMPONENT_H_
/*
Подсистема хранения данных для ПО "СИЛА-10"
Данный модуль реализует подсистему хранения данных для ПО "СИЛА-10" и предоставляет API
для работы с это подсистемой.
Модуль спроектирован на основе паттерна "Компоновщик" и представлен следующими классами:
- class StorageComponent - абстрактный класс, предоставляющий интерфейс. От него наследуются
все прочие классы модуля. Объявлен в файле "StorageComponent.h"
- class StorageException - класс исключений подсистемы хранения (исключения данного типа запускаются
общих ошибок подсистемы хранения)



разработал: Куксов П.А.
mail: aimed.fire@gmail.com
*/

#include <string>
#include <list>

namespace StorageSubSystem {

class StorageComponent {
/*
класс StorageComponent (в структуре паттерна "Компоновщик" - Component) - абстрактный класс.
Представляет одновременно и внешний интерфейс и интерфейс для дочерних классов (согласно
паттерну "Компоновщик" дочерние классы не обязаны полностью реализовывать интерейс этого класса).
Для всех функций класс предоставляет реализации по умолчанию, генерирующие исключение
*/
public:
	// добавить новый дочерний элемент
	virtual void Add(const StorageComponent*) = 0;

	// получить указатель на дочерний элемент по индексу
	StorageComponent* GetChild(int);

	// удалить дочерний элемент
	virtual void Remove(StorageComponent*);

	//получить данные
	virtual const std::string& GetData() const;

	//задать данные
	virtual void SetData(const std::string& data);

	//получить параметры
	virtual const std::string& GetParams() const;

	//задать параметры
	virtual void SetParams(const std::string& params);

	//получить имя
	virtual const std::string& GetName() const;

	//задать имя
	virtual void SetName(const std::string& name);

	//найти заданный компонент в хранилище
	virtual StorageComponent* SearchComponent(const str::string& name, int type);

	//найти все компоненты заданного типа
	virtual void SearchComponents(int type, std::list<std::string>& componentsList);


	virtual ~StorageComponent () = 0; 

protected:
	virtual void SetSharedStorage(StorageComponent*) = 0;
};//end of declaration class StorageComponent

} /* Storage */ 

#endif /* end of include guard: STORAGE_COMPONENT_H_ */
